import java.util.HashMap;
import java.util.Map;

/**
 * 作业测试
 */
public class JobTest {
    static boolean isUnique(int[] arr) {
        Map<Integer,Integer> map = new HashMap<>();
        for(int tmp : arr) {
            if(map.containsKey(tmp)) {
                return false;
            }
            map.put(tmp, 1);
        }
        return true;
    }
    public static void main(String[] args) {
        int[] arr = {1,2,1};
        if (isUnique(arr)) {
            System.out.println("yes");
        } else {
            System.out.println("no");
        }
        int w = 10;
        int[] p = {5, 3, 2, 2, 6};
        int[] g = {500, 400, 150, 350, 700};
        System.out.println(test2(w, p, g));

    }

    /**
     * 矿工问题
     * @param w
     * @param p
     * @param g
     * @return
     */
    private static int test2(int w, int[] p, int[] g) {
        //二维数组
        int[][] result = new int[g.length + 1][w + 1];
        //循环每座金矿的储量
        for (int i = 1; i < g.length + 1; i++) {
            //循环工人数
            for (int j = 1; j < w + 1; j++) {
                //当前金矿人数不够时，取当前列上一行的位置的值
                if (j < p[i - 1]) {
                    result[i][j] = result[i - 1][j];
                } else {//满足开采人数
                    result[i][j] = Math.max(result[i - 1][j],//当前列上一行的位置的值
                            result[i - 1][j - p[i - 1]] + g[i - 1]);//找到上一步的局部最优解
                }
            }
        }
        return result[g.length][w];
    }
}
